﻿package Game.DisplaySystem{
	
	import flash.display.MovieClip;
	import Game.DisplaySystem.Objects.Grounds;
	import Game.Utils.FileLoader;
	import Game.Utils.T;
	import Game.Manager;
	import External.Interface.InterfaceObject;

	public class DisplayManager extends Manager{

		
		private var m_GlobalLayer:MovieClip;//-> Layer Global contenant tous les autres layer accessible via World()
		private var m_LayerGrounds:MovieClip;//->Layer des sols dans lequel sera affiché la GroundMap
		private var m_LayerObjects:MovieClip;
		private var m_Interface:*;//Objet interface
		private var m_InterfaceLayer:MovieClip;//Calque de l'objet Interface(par dessus tout)
		
		public function get world():MovieClip{
			return m_GlobalLayer;
		}

		//Constructeur
		//parametre : _parentObject 
		//référence à l'objetParent -> utile pour ne pas avoir a ecrire MovieClip(_parent);
		public function DisplayManager(_parentObj:*):void {
			super(_parentObj);
			
			m_GlobalLayer = new MovieClip();
			m_InterfaceLayer = new MovieClip();
			Parent.addChild(m_GlobalLayer);
			Parent.addChild(m_InterfaceLayer)
			
			m_LayerGrounds = new MovieClip();
			m_LayerObjects = new MovieClip();
			m_GlobalLayer.addChild(m_LayerGrounds);
			m_GlobalLayer.addChild(m_LayerObjects);
		}
		private var datasArray:Array = new Array();
		public function onEnterFrameRefresh(_frame:int,_state:String,_players:Array):void{
			datasArray[0]=_frame;
			datasArray[1]=_state;
			datasArray[2]=_players;
			m_Interface.setEnterFrameDatas(datasArray);
		}
		
		///////////////////////////////////////////////////////////////////////////////
		// Fonction d'affichage d'un Objet
		public function showObject(_object:MovieClip):void{
			m_LayerObjects.addChild(_object);
		}
		
		////////////////////////////////////////////////////////////////////////////
		//Fonctions de chargement et d'affichage de l'interface
		public function loadInterface(_file:String):void{
			FileLoader.LoadObject(_file,onInterfaceFileLoaded,'swf');
		}
		private function onInterfaceFileLoaded(_interface:*):void{
			m_Interface = _interface;
			m_Interface.x = 0;
			m_Interface.y = 500;
			//m_Interface.setGameMaster(Parent);
			T.setInterface(m_Interface);
			m_InterfaceLayer.addChild(m_Interface);
			T.Trace("interface Loaded",1,"DisplayManager");
		}
		
		//Fonction Trace Map pour afficher la map grace aux objets Grounds contenant tous les types de sols
		//cette fonction utilise le tableau _map pour afficher les elements de la map (plaine montagne foret)
		public function traceMap(_map:Array,xOrigin:int,yOrigin:int,xLarg:int,yLarg:int):void {
			var xTemp:int=xOrigin;
			var yTemp:int=yOrigin;
			var i:int;
			var j:int;

			for (i=0; i<_map.length; i++) {
					
				for (j=0; j<_map[i].length; j++) {
					
					xTemp += xLarg/2;
					yTemp-= yLarg/2;
					
					var ground:Grounds=new Grounds(_map[i][j]);
					ground.x=xTemp;
					ground.y=yTemp;
					m_LayerGrounds.addChild(ground);
					
					//--> on peut renommer ainsi la case et recupérer plus tard les info pour localisation par ex
					//ground.name=i+"-"+j;
					//
				}

				xOrigin += xLarg/2;
				yOrigin += yLarg/2;
				
				xTemp = xOrigin;
				yTemp = yOrigin;
			}
		}
		
		//Fonction de suppression de l'affichage de la Map
		public function clearMap():void{
			var childNum:int = m_LayerGrounds.numChildren-1;
			for (var i:int=childNum;i>=0;i--){
				m_LayerGrounds.removeChildAt(i);
			}
		}
		//Fonction d'appel de l'interface:{
		public function callInterface(_function:String,_params:Array = null):void{
			m_Interface.callFunction(_function,_params);
		}
		
	}
}